package com.prometheus.controller;

import io.prometheus.client.Summary;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RestController;

/**
 * Summary
 * Summary和Histogram非常相似，都可以统计事件发生的次数或者大小，以及其分布情况，
 * 他们都提供了对时间的计数_count以及值的汇总_sum，也都提供了可以计算统计样本分布情况的功能，
 * 不同之处在于Histogram可以通过histogram_quantile函数在服务器计算分位数。
 * 而Sumamry的分位数则是直接在客户端进行定义的。因此对于分位数的计算，
 * Summary在通过PromQL进行查询的时候有更好的性能表现，而Histogram则会消耗更多的资源，
 * 但是相对于客户端而言Histogram消耗的资源就更少。用哪个都行，根据实际场景自由调整即可。
 *
 * @author: Alan
 * @date: 2021/5/13 23:18
 */
@RestController
public class SummaryDemo {
    //注册
    public static final Summary summaryDemo = Summary.build()
            // 添加50%分位数，允许有5%的误差,相当于求中位数
            .quantile(0.5, 0.01)
            // 添加90%分位数，允许有1%的误差
            .quantile(0.9, 0.01)
            .name("summaryDemo").labelNames("label1","label2","label3","label4","label5")
            .help("Summary 实例").register();

    /**
     * 指标埋点
     */
    @Scheduled(cron="0/5 * * * * ?")
    public void changeSummary(){
        summaryDemo.labels("1","2","3","4","5").observe(1);
    }
}
